2
תגובות
אז רציתי לקבל ביקורת על קוד קצר שרשמתי עם הפריימוורק Yii, משום שאני עובד על פרויקט והייתי רוצה להיות בטוח שאני פועל בצורה הנכונה עם הפריימוורק (בעיקר בקטע של המסד בקוד).
אם לדעתכם משהו לא טוב או שאפשר לעשות טוב יותר אני אשמח לשמוע :)

זה קוד פשוט שהמטרה שלו היא לבדוק אם קיים סרטון במסד ואם כן אז לרשום את השם שלו, ואם לא אז להציג שגיאה.

VideoController:
<?php

class VideoController extends CController
{

    private $video = array();

    public function actionIndex($videoID = 0)
    {
        if ($this->findVideo($videoID))
        {
            $this->renderText($this->video['video_name']);
        }
        else
        {
            $this->renderText('Error: This video does not exist.');
        }
    }

    private function findVideo($videoID = 0)
    {
        if (is_numeric($videoID))
        {
            $this->video = Video::findVideo($videoID);

            if (count($this->video) == 1)
                return true;
            else
                return false;
        }
        else
            return false;
    }

}


Video: (המודל)

<?php

class Video extends CActiveRecord
{

    public static function model($className = __CLASS__)
    {
        return parent::model($className);
    }

    public function tableName()
    {
        return 'videos';
    }

    public function primaryKey()
    {
        return 'video_id';
    }

    public static function findVideo($videoID = 0)
    {
        return self::model()->find(
            'video_id = :videoID',
            array(
                ':videoID' => $videoID
            )
        );
    }

}


תודה מראש :)

2 תשובות

avatar ענה intval ב 30 ליוני 2014 #

באופן כללי אתה עובד נכון. כל הכבוד.

הייתי מציין שאם בראוטר כתוב משהו בסגנון:

<videoID:[0-9]+>

אז בוודאות הוא יהיה numeric. אני גם לא רואה סיבה שלפונקציית חיפוש יהיה ערך ברירת מחדל לפרמטרים. אף אחד לא אמור להפעיל פונקצית חיפוש בלי פרמטרים.

בנוסף, החיפוש שאתה מבצע הוא חיפוש לפי מפתח ראשי ולכן את כל הפונקציה findVideo אפשר להחליף בשורה אחת:
$this->video = Video::model()->findByPk($videoID);
return $this->video !== null;

avatar ענה LearningYii ב 01 ליולי 2014 #

תודה רבה :)